1).面向对象
1.go语言仅支持封装,不支持继承和多态
2.go语言没有 class,只有 struct
2).结构体的定义
1 | type treeNode struct { |
1.不论地址还是结构本身,一-律使用.来访问成员
3).结构的创建
1 | func createTreeNode(value int) *TreeNode { |
1.使用自定义工厂函数
2.注意返回了局部变量地址
4).结构创建在堆上还是栈上?
对比c++局部变量分配在栈上,函数退出局部变量销毁,传出去的话在堆上分配,需要手动销毁
Go 语言分配在堆上还是栈上?不一定,这个是由 go 语言的编译器、运行环境决定的。如果堆上分配的话就会参与垃圾回收
5).为结构定义方法
1 | func (node TreeNode) print() { |
1.显示定义和命名方法接收者
6).用指针作为方法接收者
1 | func (node *TreeNode) setValue(value int) { |
1.只有使用指针才可以改变结构内容
2.nil 指针也可以调用方法!
7).值接收者 vs 指针接收者
1.要改变内容必须使用指针接收着
2.结构过大也考虑指针接收者
3.一致性:如果有指针接收者,最好都是指针接收者
4.值接收者 是 go 语言特有
5.值/指针接收者均可接收值/指针
1).封装
1.名字 go 语言一般使用 CamelCase
2.首字母大写:public
3.首字母小写:private
2).包
1.每个目录一个包
2.main 包包含可执行入口
3.为结构定义的方法必须放在同一个包内
4.可以是不同文件
包
1.如何扩充系统类型或者别人的类型
定义别名
使用组合
1.goget 获取第三方库
goget 命令演示
go get golang.org/x/tools/cmd/goimports
go get github.com/gpmgo/gopm
go build 来编译
go install 产生 pkg 文件和可执行文件
go run 直接编译运行
src
git repsitory 1
git repsitory 2
pkg
git repsitory 1
git repsitory 2
bin
执行文件1,2,3
1 | import ( |